/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.blocks.signals; import mods.railcraft.api.signals.*; import mods.railcraft.common.util.misc.Game; import net.minecraft.nbt.NBTTagCompound; import org.apache.logging.log4j.Level; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; public class TileSignalBlockSignal extends TileSignalBase implements IControllerTile, ISignalTile, ISignalBlockTile { private final SimpleSignalController controller = new SimpleSignalController(getLocalizationTag(), this); private final SignalBlock signalBlock = new SignalBlockSimple(getLocalizationTag(), this); @Override public EnumSignal getSignalType() { return EnumSignal.BLOCK_SIGNAL; } @Override public void updateEntity() { super.updateEntity(); if (Game.isNotHost(worldObj)) { controller.tickClient(); signalBlock.tickClient(); return; } controller.tickServer(); signalBlock.tickServer(); SignalAspect prevAspect = controller.getAspect(); if (controller.isBeingPaired()) { controller.setAspect(SignalAspect.BLINK_YELLOW); } else { controller.setAspect(signalBlock.getSignalAspect()); } if (prevAspect != controller.getAspect()) { sendUpdateToClient(); } if (SignalTools.printSignalDebug && prevAspect != SignalAspect.BLINK_RED && controller.getAspect() == SignalAspect.BLINK_RED) { Game.log(Level.INFO, "Signal Tile changed aspect to BLINK_RED: source:[{0}, {1}, {2}]", xCoord, yCoord, zCoord); } } @Override public SignalAspect getSignalAspect() { return controller.getAspect(); } @Override public void writeToNBT(NBTTagCompound data) { try { super.writeToNBT(data); signalBlock.writeToNBT(data); controller.writeToNBT(data); } catch (Throwable er) { Game.logThrowable(Level.ERROR, "Signal Tile crashed on write.", 10, er); } } @Override public void readFromNBT(NBTTagCompound data) { try { super.readFromNBT(data); signalBlock.readFromNBT(data); controller.readFromNBT(data); } catch (Throwable er) { Game.logThrowable(Level.ERROR, "Signal Tile crashed on read.", 10, er); } } @Override public void writePacketData(DataOutputStream data) throws IOException { super.writePacketData(data); controller.writePacketData(data); signalBlock.writePacketData(data); } @Override public void readPacketData(DataInputStream data) throws IOException { super.readPacketData(data); controller.readPacketData(data); signalBlock.readPacketData(data); } @Override public SimpleSignalController getController() { return controller; } @Override public SignalBlock getSignalBlock() { return signalBlock; } }